package tech.aistar.corejava.day11;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * @author success
 * @version 1.0
 * @description:本类用来演示:
 * @date 2019/7/29 0029
 */
public class ArrayListUpdateDemo {
    public static void main(String[] args) {
        //創建一個用戶集合
        List<User> users = new ArrayList<>();

        //模擬一些用戶的數據
        User u1 = new User(1,"tom");
        User u2 = new User(2,"jack");
        User u3 = new User(3,"success");

        users.add(u1);
        users.add(u2);
        users.add(u3);

        //刪除集合中第一次出現的對象 - 提供了hashcode和equals,只要id是一樣的,那麼就認為是同一個對象.
        //users.remove(new User(3,"sxx"));
        //users.remove(u3);
        
        //根據用戶的id進行刪除 - 下標唯一性
        //delByUserId(users,2);
        delByUserId02(users,1);

        //根據用戶的名稱進行刪除 - 用戶的名稱不是唯一的.

        //迭代器
        Iterator<User> iter = users.iterator();
        while(iter.hasNext()){
            System.out.println(iter.next());
        }
    }

    /**
     * 增強for - 只讀的
     * @param users
     * @param id
     */
    private static void delByUserId02(List<User> users, int id) {
        //判斷參數的有效性
        if(null == users && users.size() == 0){
            return;
        }
//        User du = null;
//
//        //只讀的...
//        for(User u:users){
//            if(u.getId().equals(id)){
//                //users.remove(u);//java.util.ConcurrentModificationException
//                //break;
//                du = u;
//            }
//        }
//        if(null!=du) {
//            users.remove(du);
//        }
//
        Iterator<User> iter = users.iterator();
        while(iter.hasNext()){
            User u = iter.next();
            if(u.getId().equals(id)){
                //迭代器的删除方法
                iter.remove();
               // users.remove(u);
//                break;//java.util.ConcurrentModificationException
            }
        }
    }

    /**
     * 注意:增強for和迭代器屬於只讀的.
     * 根據用戶的id進行刪除操作
     * @param users
     * @param id
     */
    private static void delByUserId(List<User> users, Integer id) {
        //判斷參數的有效性
        if(null == users && users.size() == 0){
            return;
        }
        //普通for循環
        for (int i = 0; i < users.size(); i++) {
            if(users.get(i).getId().equals(id)){
                //id是唯一性的.
                //users.remove(i);//根據下標刪除
                users.remove(users.get(i));
                break;
            }
        }
    }
}
